地雷安裝完成,再來就是在四周放上數字,告訴玩家周圍有多少地雷。
參考:array 1D 轉2D
每列的第一格到最後一格,
檢查是否有地雷?
有,就把四周的掃雷器+1addNum(列,欄)
。
for(var newrow=0; newrow<mapsize; newrow++){//第一列~第三列
boommap[newrow].forEach(function(item,index,array){//第一格~最後一格
if(item=="*"){
console.log(newrow,index,array);
addNum(newrow,index);
}
});
}
用for
迴圈和if
實作,
如果遇到地雷,
則九宮格範圍數字+1。
//數字處理
function addNum(row,col){
console.log("boom:",row,col)//地雷起始位置
var rowi,coli;
for(var rgnine=0;rgnine<9; rgnine++){//rgnine九宮格範圍
rowi=row+Math.floor(rgnine/3)-1;
coli=col+(rgnine%3)-1;
if((-1<rowi)&&(rowi<mapsize)//「列」沒超出範圍
&&(-1<coli)&&(coli<mapsize)//「欄」沒超出範圍
&&(boommap[rowi][coli]!=="*"))
{
console.log("add:",rowi,coli);
boommap[rowi][coli]+=1;
}
}
}
地雷有了;掃雷器有了,
再來就是製作地圖。
mapsize**2
是因為地圖是3x3,
所以用地圖長度的平方。
for (let wd=0;wd<mapsize**2;wd++){
let row =Math.floor(wd/3);
let col =wd%3;
map[0].innerHTML+="<button>"+boommap[row][col]+"</button>";//上帝地圖
caseMap(wd,row,col);//加上class屬性
map[1].innerHTML+="<button>1</button>";//一般地圖
}
childNodes
的起始值是1,
這點比較特別,
一般都是0。
"*":地雷
0:空地
1~8:掃雷器(數字)
//判斷地圖狀態
function caseMap(wd,row,col){
switch(boommap[row][col]){
case "*":
map[0].childNodes[wd+1].classList.add("boom");
break;
case 0:
map[0].childNodes[wd+1].classList.add("empty");
break;
default:
map[0].childNodes[wd+1].classList.add("number");
break;
}
}
地圖總算是完成,不過程式不太漂亮,
明天有時間要來優化。
感謝撥冗閱讀,
有錯誤地方請多指教。
哇! 是經典遊戲踩地雷耶~ 這個主題不錯哦,小馬喜歡,
之後有空也來跟著你實作看看,
目前小馬也忙於參賽努力生稿中,
一起加油完賽吧。
謝謝小馬的鼓勵
生稿真的不容易,
好想要只貼程式碼。
加油!加油!